package com.kotlin.dongdong.framework.utils

import android.util.Log
import java.lang.ClassCastException
import java.lang.reflect.ParameterizedType

/**
 * Created by dongdongzheng on 2018/2/12.
 */
object TUtil {

    fun <T> getT(o: Any, i: Int): T? {
        try {
            // getClass().getGenericSuperclass()表示此Class所表示的实体(类、接口、基本类型或void)的直接超类的Type然后将其转换ParameterizedType
            // getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。
            // 获得超类的泛型参数的实际类型的实例
            return ((o.javaClass.getGenericSuperclass() as ParameterizedType).actualTypeArguments[i] as Class<T>)
                    .newInstance()
        } catch (e: InstantiationException) {
            Log.e("实例化异常", e.toString())
        } catch (e: IllegalAccessException) {
            Log.e("非法访问异常", e.toString())
        } catch (e: ClassCastException) {
            Log.e("类型转换异常", e.toString())
        }

        return null
    }

    fun forName(className: String): Class<*>? {
        try {
            return Class.forName(className)
        } catch (e: ClassNotFoundException) {
            Log.e("类无法加载异常", e.toString())
        }

        return null
    }
}